package logica;

import java.util.Date;

import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import dataAccessObjects.CitaDAO;
import dataAccessObjects.ConsultorioDAO;
import dataAccessObjects.MedicoDAO;
import dataAccessObjects.PacienteDAO;

import entidades.Cita;
import entidades.Consultorio;
import entidades.Medico;
import entidades.Paciente;

public class Manejador {
	//static EntityManagerFactory factoryDerby = Persistence.createEntityManagerFactory("DerbyPU", System.getProperties());
	static EntityManagerFactory factoryMYSQL = Persistence.createEntityManagerFactory("MysqlPU", System.getProperties());
	//EntityManagerFactory  factoryMYSQL = Persistence.createEntityManagerFactory("MysqlPU");
	
	PacienteDAO pd = new PacienteDAO();	
	MedicoDAO md = new MedicoDAO();	
	ConsultorioDAO cd = new ConsultorioDAO();
	CitaDAO cid = new CitaDAO();

	public void InicializacionDeDatos(){		
		Paciente u = new Paciente();
		Paciente v = new Paciente();
		Paciente w = new Paciente();
		Paciente x = new Paciente();
		
		Medico a = new Medico();
		Medico b = new Medico();
		
		Consultorio c = new Consultorio();
				
		u.setmNombre("Laura");
		u.setmApellido("Gonzales");
		u.setmDocumento(1110471457);	
		
		v.setmNombre("Camilo");
		v.setmApellido("Rodriguez");
		v.setmDocumento(1110234890);
		
		w.setmNombre("Andres");
		w.setmApellido("Jaramillo");
		w.setmDocumento(88654332);
		
		x.setmNombre("Jaime");
		x.setmApellido("Diaz");
		x.setmDocumento(90228236);
		
		a.setmNombre("Juan");
		a.setmApellido("Cortes");
		a.setmDocumento(97326904);
		a.setmTarjetaProfesional(1234567890);
		
		b.setmNombre("Ana");
		b.setmApellido("Garcia");
		b.setmDocumento(88523735);
		b.setmTarjetaProfesional(1987654321);
		
		c.setmNumero(315);
		c.setmEspecializacion("Odonotologia");
		c.setmEstado(false);
		
		
		
		setPaciente(u);
		setPaciente(v);
		setPaciente(w);
		setPaciente(x);
		setMedico(a);
		setMedico(b);
		setConsultorio(c);
		
		Cita cita1 = new Cita();
		cita1.setPaciente(getPacienteById(1110471457));
		cita1.setmMedico(getMedicoById(1987654321));
		cita1.setmConsultorio(getConsultorioById(315));		
		cita1.setmFecha(new Date());
		
		Cita cita2 = new Cita();
		cita2.setPaciente(getPacienteById(1110471457));
		cita2.setmMedico(getMedicoById(1987654321));
		cita2.setmConsultorio(getConsultorioById(315));		
		cita2.setmFecha(new Date());
		
		Cita cita3 = new Cita();
		cita3.setPaciente(getPacienteById(88654332));
		cita3.setmMedico(getMedicoById(1987654321));
		cita3.setmConsultorio(getConsultorioById(315));		
		cita3.setmFecha(new Date());
		
		setCita(cita1);
		setCita(cita2);
		setCita(cita3);
	}
	
	
	// Metodos para paciente.
	public void setPaciente(Paciente paciente){
		pd.CreatePaciente(factoryMYSQL, paciente);
	}
	public Paciente getPacienteById(int id){					
		return pd.ReadPaciente(factoryMYSQL, id);
	}
	public void UpdatePacienteById(int id, Paciente pacienteActualizado){
		pd.UpdatePaciente(factoryMYSQL, id, pacienteActualizado);
	}
	public Paciente DeletePacienteById(int id){
		return pd.DeletePaciente(factoryMYSQL, id);
	}
	
	public void getListaPacientes(){			
		pd.getAll(factoryMYSQL);		
	}
	
	
	//metodos para medico
	public void setMedico(Medico medico){
		md.CreateMedico(factoryMYSQL, medico);
	}
	public Medico getMedicoById(int id){					
		return md.ReadMedico(factoryMYSQL, id);
	}
	public void UpdateMedicoById(int id, Medico medicoActualizado){
		md.UpdateMedico(factoryMYSQL, id, medicoActualizado);
	}
	public Medico DeleteMedicoById(int id){
		return md.DeleteMedico(factoryMYSQL, id);
	}
	
	public void getListaMedicos(){					
		md.getAll(factoryMYSQL);		
	}
	
	//metodos para Consultorio
	public void setConsultorio(Consultorio consultorio){
		cd.CreateConsultorio(factoryMYSQL, consultorio);
	}
	public Consultorio getConsultorioById(int id){					
		return cd.ReadConsultorio(factoryMYSQL, id);
	}
	public void UpdateConsultorioById(int id, Consultorio consultorioActualizado){
		cd.UpdateConsultorio(factoryMYSQL, id, consultorioActualizado);
	}
	public Consultorio DeleteConsultorioById(int id){
		return cd.DeleteConsultorio(factoryMYSQL, id);
	}
	
	public void getListaConsultorio(){
		cd.getAll(factoryMYSQL);		
	}
	
	//metodos para Citas
	public void setCita(Cita cita){
		cid.CreateCita(factoryMYSQL, cita);
	}
	public Cita getCitaById(int id){					
		return cid.ReadCita(factoryMYSQL, id);
	}
	public void UpdateCitaById(int id, Cita citaActualizada){
		cid.UpdateCita(factoryMYSQL, id, citaActualizada);
	}
	public Cita DeleteCitaById(int id){
		return cid.DeleteCita(factoryMYSQL, id);
	}
	
	public void getListaCitasByUsuarioId(int id){
		cid.getAllByUsuarioId(factoryMYSQL,id);		
	}
	
}
